/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Miguel
 */
public class Objetos {
    
    
    public Cliente[] obtenerClientes(){
        Conexion nCon=new Conexion();
        String clientes;
        String[]a1;
        String[]a2;
        clientes=nCon.obtenerDatos("getClientes");
        a1=clientes.split("\n");       
        Cliente [] cliente=new Cliente[a1.length];
        for(int i=0;i<a1.length;i++){
            a2=a1[i].split("\\|");
            
            cliente[i]=new Cliente();
            cliente[i].setNombre(a2[0]);
            cliente[i].setApellido(a2[1]);
            cliente[i].setfecNac(new Date(Long.parseLong(a2[2])));
            cliente[i].setDireccion(a2[3]);
            cliente[i].setCP(a2[4]);
            cliente[i].setemail(a2[5]);
            cliente[i].setTelefono(a2[6]);
            cliente[i].setNomUsr(a2[7]);
            cliente[i].setPass(a2[8]);
            cliente[i].setTipo(a2[9]);
            cliente[i].setCb(a2[10]);
            cliente[i].setCodTarjeta(a2[11]);
            cliente[i].setCodigo(a2[12]);
            cliente[i].setTTarjeta(a2[13]);
            
        }
        return cliente;        
    }
    
    public Evento[] obtenerEventos(){
        Conexion nCon=new Conexion();
        String eventos;
        String[]a1;
        String[]a2;
        eventos=nCon.obtenerDatos("getEventos");
        
        a1=eventos.split("\n");       
        Evento [] evento=new Evento[a1.length];
        for(int i=0;i<a1.length;i++){
            int seccionS=0;
            
            
            a2=a1[i].split("\\|");
            evento[i]=new Evento();
            seccionS=a2.length-6;
            Seccion [] sec=new Seccion[seccionS/3];
            
            evento[i].setClave(a2[0]);
            evento[i].setNombre(a2[1]);
            evento[i].setForo(a2[2]);
            evento[i].setCiudad(a2[3]);
            evento[i].setFecha(new Date(Long.parseLong(a2[4])));
            evento[i].setHora(new Date(Long.parseLong(a2[5])));
            
            for(int j=0;j<sec.length;j++){
                sec[j]=new Seccion();
                sec[j].setNomSec(a2[6+3*j]);
                sec[j].setCantSec(Integer.parseInt(a2[7+3*j]));
                sec[j].setCostSec(Integer.parseInt(a2[8+3*j]));
            }
            
            evento[i].setSecEvt(sec);
        }
        return evento;     
    }
    
    public Evento[] obtenerEventosT(){
        Date hoy=new Date();
        Evento[] eventos=obtenerEventos();
        
        ArrayList<Evento> evento=new ArrayList<Evento>();
        for(int i=0;i<eventos.length;i++){
            if(eventos[i].getFecha().after(hoy)){
                evento.add(eventos[i]);
            }
        }
        Evento[] even=new Evento[evento.size()];
        for(int i=0;i<evento.size();i++){
            even[i]=evento.get(i);
        }
        return even;
    }
    
    public Boleto[] obtenerBoletos(String nomUsr){
        Conexion nCon=new Conexion();
        ArrayList<Boleto> tickets=new ArrayList<Boleto>();
        String boletos;
        String[]a1;
        String[]a2;
        boletos=nCon.obtenerDatos("getBoletos");
        a1=boletos.split("\n");       
        Boleto boleto=new Boleto();
         
        for(int i=0;i<a1.length;i++){
            a2=a1[i].split("\\|");
            if(a2[6].equals(nomUsr)){
                boleto=new Boleto();
                boleto.setClaveB(a2[0]);
                boleto.setSeccion(a2[1]);
                boleto.setFila(a2[2]);
                boleto.setAsiento(a2[3]);
                boleto.setPrecio(Double.parseDouble(a2[4]));
                boleto.setClaveE(a2[5]);
                boleto.setNomUsr(a2[6]);
                boleto.setFecCompra(new Date(Long.parseLong(a2[7])));
                tickets.add(boleto);
                }
            
        }
        Boleto [] ticketsS=new Boleto[tickets.size()];
        for(int i=0;i<ticketsS.length;i++){
            ticketsS[i]=tickets.get(i);
        }
        
        return ticketsS;  
        /*for(int i=0;i<boleto.length;i++){
            System.out.println(boleto[i].getClaveB()+" "+boleto[i].getPrecio()+" "+boleto[i].getNomUsr());
        }*/
    }
    
    public Boleto[] obtenerBoletos(String ClaveEvento, String Seccion){
        Conexion nCon=new Conexion();
        ArrayList<Boleto> tickets=new ArrayList<Boleto>();
        String boletos;
        String[]a1;
        String[]a2;
        boletos=nCon.obtenerDatos("getBoletos");
        a1=boletos.split("\n");       
        Boleto boleto=new Boleto();
         
        for(int i=0;i<a1.length;i++){
            a2=a1[i].split("\\|");
            if(a2[5].equals(ClaveEvento)){
                if(a2[1].equals(Seccion)){
                    boleto=new Boleto();
                    boleto.setClaveB(a2[0]);
                    boleto.setSeccion(a2[1]);
                    boleto.setFila(a2[2]);
                    boleto.setAsiento(a2[3]);
                    boleto.setPrecio(Double.parseDouble(a2[4]));
                    boleto.setClaveE(a2[5]);
                    boleto.setNomUsr(a2[6]);
                    boleto.setFecCompra(new Date(Long.parseLong(a2[7])));
                    tickets.add(boleto);
                }
            }        
        }
        Boleto [] ticketsS=new Boleto[tickets.size()];
        for(int i=0;i<ticketsS.length;i++){
            ticketsS[i]=tickets.get(i);
        }
        
        return ticketsS;  
    }
    public String[] obtenerClavesB(){
        Conexion nCon=new Conexion();
        String [] boletos=nCon.obtenerDatos("getBoletos").split("\n");
        String [] tickets=new String[boletos.length];
        for(int i=0;i<boletos.length;i++){
            tickets[i]=boletos[i].split("\\|")[0];
        }
        return tickets;
    }
    
    public Usuario[] obtenerAdministradores(){
        Conexion nCon=new Conexion();
        String administradores;
        String[]a1;
        String[]a2;
        administradores=nCon.obtenerDatos("getAdmones");
        a1=administradores.split("\n");       
        Usuario [] users=new Usuario[a1.length];
        for(int i=0;i<a1.length;i++){
            a2=a1[i].split("\\|");
            
            users[i]=new Usuario();
            users[i].setNombre(a2[0]);
            users[i].setApellido(a2[1]);
            users[i].setfecNac(new Date(Long.parseLong(a2[2])));
            users[i].setDireccion(a2[3]);
            users[i].setCP(a2[4]);
            users[i].setemail(a2[5]);
            users[i].setTelefono(a2[6]);
            users[i].setNomUsr(a2[7]);
            users[i].setPass(a2[8]);
            users[i].setTipo(a2[9]);
            
        }
        return users; 
    } 
    
    public Boleto generarBoleto(Evento event, String seccion, String nomUsr){
            Boleto boleto=new Boleto();
            int BoletosSec;
            int i=0;    
            boleto.setClaveB(generarClave());
            boleto.setSeccion(seccion);
            boleto.setClaveE(event.getClave());
            boleto.setFecCompra(new Date());
            boleto.setNomUsr(nomUsr);      
            for(i=0;i<event.getSecEvt().length;i++){
                if(seccion.equals(event.getSecEvt()[i].getNomSec())){
                    break;
                }
            }
            boleto.setPrecio(event.getSecEvt()[i].getCostSec());

            Boleto [] boletosV=new Objetos().obtenerBoletos(event.getClave(), seccion);
            BoletosSec=event.getSecEvt()[i].getCantSec()+boletosV.length;
            int numeroDeBoletos=event.getSecEvt()[i].getCantSec();



            if(boletosV.length==0){
                boleto.setFila("A");
                boleto.setAsiento("1");
            }
            else{
                char fil=boletosV[boletosV.length-1].getFila().charAt(0);
                int num=Integer.parseInt(boletosV[boletosV.length-1].getAsiento());
                if(BoletosSec<1300){
                    if(num<50){
                        boleto.setFila(""+fil);
                        boleto.setAsiento(""+(num+1));
                    }
                    else if(num==50){
                        boleto.setFila(""+(fil+1));
                        boleto.setAsiento("1");
                    }
                }
                else{
                    if(BoletosSec%26==0){
                        if(num<(BoletosSec/26)){
                            boleto.setFila(""+fil);
                            boleto.setAsiento(""+(num+1));
                        }
                        else if(num==(BoletosSec/26)){
                            boleto.setFila(""+(fil+1));
                            boleto.setAsiento("1");
                        }
                    }
                    else{
                        if(num<((int)(BoletosSec/25))){
                            boleto.setFila(""+fil);
                            boleto.setAsiento(""+(num+1));
                        }
                        else if(num==(int)(BoletosSec/25)){
                            boleto.setFila(""+(fil+1));
                            boleto.setAsiento("1");
                        }
                        if(num==(int)(BoletosSec/25) && Character.getNumericValue(fil)==34){
                            boleto.setFila("Z");
                            boleto.setAsiento(""+(num+1));
                        }
                    }

                }
            }
            Seccion [] sec=event.getSecEvt();
            sec[i].setCantSec(numeroDeBoletos-1);
            event.setSecEvt(sec);
            new Conexion().modificarEvento(event);
            return boleto;
        
    }
    
    public String generarClave(){
        String enviar="";     
        String [] claves=new Objetos().obtenerClavesB();
        for(int i=0;i<16;i++){
            enviar+=""+(int)(Math.random()*10);
        }
        for(int l=0;l<claves.length;l++){
            if(enviar.equals(claves[l])){
                for(int i=0;i<16;i++){
                    enviar+=""+(int)(Math.random()*10);
                }
                l=-1;
            }
        }
        
        return enviar;
    }
    
    public static void main(String [] args){
        Objetos ob=new Objetos();
        String [] claves=ob.obtenerClavesB();
        for(int i=0;i<claves.length;i++){
            System.out.println(claves[i]);
        }
    }
}
